С выходом Composition API в Vue появилось новые возможности повторного использования кода. Больше нет необходимости в миксинах, компонентах высшего порядка и прочих “хаках”, если вам нужно вынести общую логику для нескольких компонентов. Но что если у вас есть нереактивный сервис, инкапсулирующий бизнес-логику, а переписывать все на composition api не хочется?
К примеру возьмем простой класс с состоянием:
export class MyService { foo: Object = {} setFoo (foo: Object) { this.foo = foo } }
В нем все прекрасно, но что если мы хотим сделать его свойство реактивным? Согласно документации, мы можем сделать, например, вот так:
import { Ref, ref } from 'vue' export class MyService { foo: Ref<Object> = ref({}) setFoo (foo: Object) { this.foo.value = foo } }
Вроде бы тоже неплохо, но если ваш сервис большой и иерархичный, переводить каждое свойство в ref будет трудно и больно. Тут на помощь приходят декораторы Typescript:
export class MyService { @Reactive foo: Object =